iT邦幫忙

2022 iThome 鐵人賽

DAY 27
1
DevOps

30天的社群機器人之旅系列 第 27

Day 27 正則表達式

  • 分享至 

  • xImage
  •  

今天要來介紹的是正則表達式。

為什麼前幾天都還在講 Telegram Bot ,突然會冒出一個沒有什麼關係的正則表達式呢?

當然是因為 Telegram Bot 也可以使用正則表達式啊。

首先先來簡單介紹一下正則表達式,正則表達式簡單說就是一個規則,我們可以根據這個規則搜尋出符合我們所想的字串,因此我們需要先建立規則再去匹配字串是否符合我們的規則。

舉例來說我們有很多 Youtube 的連結,有兩組正常的 Youtube 連結,跟其他看起來很像,但是並不是 Youtube 的連結,那麼要找出來正常的就有點麻煩,好在 Youtube 的連結是有規則的,我們就可以透過正則表達式快速找出正常的連結。

https://www.youtube.com/watch?v=zIn40ysBJvY
http://www.youtubeabc.com/watch?v=zIn40ysBJvY
http://www.youtude.com/watch?v=zIn40ysBJvY
https://youtu.be/zIn40ysBJvY
http://www.youtu.com/watch?v=zIn40ysBJvY

首先正則表達式通常是由 / 開始的,然後對於字元可以簡單分為顯示字元、非顯示字元;顯示字元又可分為數字、文字、空格及非空格(非空格包含數字及文字)。

正則表達式 描述
\d 數字, 0~9
\w 文字, A~Z 及 a~z
\s 空格, 空白鍵
\w 文字、數字及底線(_)
\S 非空格, 包含數字及文字
. 除了 \n 及 \r 以外的任何字元

但是上面這些都是匹配固定規則的,如果我們想要自訂規則的話我們可以使用中括號(如果需要精確匹配某個字元直接輸入就可以了)。

正則表達式 描述
[ABC] 大寫的 A 、 B 跟 C
[^ABC] 除了大寫的 A 、 B 跟 C 以外的所有
[A-Z] 大寫的 A 到 Z
[^A-Z] 除了大寫的 A 到 Z 以外的所有

接著以上我們都是匹配單個字元,如果需要匹配多個字元我們可以加上以下表達式

正則表達式 描述
? 0 或 1 次
+ 1 或多次
* 0 或多次
{n} 精確的 n 次(不接受負數)
{n,} n 次以上
{n,m} n 至 m 次

如果我們要匹配手機號碼就可以這樣匹配。

09\d{8}

最後補充一個有點特殊但我還蠻常用的,如果需要將字串中的某段進行不一樣的匹配,我們可以使用 () 進行子表達式的匹配。

基本的正則表達式大概就是如此。

我們再來寫個正則表達式匹配一下 Youtube 的連結,我們可以寫成如下

https://(www.)?youtu\.?be(.com)?/(watch\?v=)?\w*

各位可以到以下連結驗證看看哪兩個連結是正確的連結。

https://c.runoob.com/front-end/854/?optionGlobl=global

至於說了這麼多, Telegram Bot 的哪邊又可以使用到呢?

我們在 CallbackQueryHandler 處理按鈕的回傳時,就可以使用到正則表達式來匹配我們的訊息,節省了一堆 if else 的使用。

CallbackQueryHandler 中有個參數 pattern 可以直接輸入正則表達式來匹配對應的訊息,讓我們的程式碼可以更加的精簡。

那麼就先到這邊,話說這篇好像有點跟 Telegram Bot 無關了。

大家掰~掰~


上一篇
Day 26 Telegram Bot 加入群組
下一篇
Day 28 InlineQueryHandler
系列文
30天的社群機器人之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言